lpunbfandomcom-20200214-history
1/2015-Python-Último Grupo
Integrantes do grupo Iago Lobo Ribeiro de Moraes - 14/0082921 Ícaro Marcelino Miranda - 14/0022139 Francisco Anders - Thiago Araújo - Slides Histórico e Versões da linguagem Histórico ' Python foi concebido no fim da década de 80 (sua implementação começa em 1989), por Guido Van Rossum, quando este trabalhava no CWI (Instituto Nacional de Pesquisa em Matemática e Ciência da Computação), na Holanda. A intenção era ter uma linguagem capaz de suceder a linguagem de programação ABC, que fosse capaz de ter tratamento de exceções e de interfaciar com o sistema operacional Amoeba. 'Versão 0.9 Em fevereiro de 1991, Van Rossum publicou o código da primeira versão de Python, que ficou conhecida como versão 0.9.0. O sistema que permitia a programação modular foi baseado na linguagem de programação Modula-3. Tal versão já possuia classes com herança, tratamento de exceções, funções e os tipos de dados primitivos da linguagem de Python atual (listas, tuplas, dicionários...). 'Versões 1.x' A versão 1.0 de Python foi lançada em janeiro de 1994. O principais ganho foi a expansão da capacidade de programar de modo funcional, com a inclusão de funções lambda e das funções map, filter e reduce. A versão 1.2 foi a última lançada enquanto Van Rossum esteve no CWI, já que em 1995 ele foi para o CNRI(Corporação para Iniciativas de Pesquisa Nacional), nos Estados Unidos. Em sua versão 1.4, Python adquiriu novas funcionalidades. Suporte para o tratamento de números complexos foi introduzido, assim como uma melhora na forma de encapsular dados, baseado no Modula-3. A versão 1.6 foi lançada em 2000, pela CNRI mas pouco tempo depois a versão 2.0 é lançada por uma equipe de programadores que haviam ido fundar a BeOpen.com, da qual Van Rossum fazia parte. A versão 1.6.1 surge em 2001, tendo características semelhantes a versão 2.1. 'Versões 2.x' Em 2000, houve a migração de boa parte da equipe de desenvolvimento de Python para o BeOpen.com. A BeOpen.com lança então a versão 2.0 da linguagem, também em 2000. Essa versão introduz, baseado-se nas linguagens de programação funcional SETL e Haskell, a possibilidade de construir listas a partir de listas já existentes. Outra inovação foi um sistema coletor de lixo. A versão 2.1 surge em 2001, e desde então as distribuições de Python passam a ser da PSF (Python Software Foundation) e compatíveis com o padrão GPL. A versão 2.2 surge em 2001, e agrupava em uma mesma hierarquia os tipos de Python (escritos em C) e as classes (escritas em Python). A versão 2.6. surge em 2008, tendo como objetivo preparar uma transição para a versão 3.0, sem entretanto perder compatibilidade com códigos Python escritos em versões antigas. A versão 2.7 foi a última da série 2.x, tendo sido lançada em 2010. Os projetistas e mantenedores da linguagem Python decidiram não adicionar mais nenhuma funcionalidade às versões 2.x, embora tenham anunciado que irão continuar corrigindo as versões de possíveis bugs e atualizando-as para mantê-las compatíveis com novas tecnologias de hardware e de sistemas operacionais que venham a ser lançadas. 'Versões 3.x' A decisão de criar uma nova versão da linguagem, visou reduzir o número de maneiras diferentes de se fazer uma determinada ação em Python. Assim sendo, houve uma reestruturação da linguagem, a qual teve como consequência a perda de compatibilidade com a série 2.x. A primeira versão, a 3.0, surgiu em 2008. A versão mais atual é a 3.4 As versões 3.x apresentam mudanças consideráveis. O comando print foi substituido pela função print(). Há um melhor suporte Unicode, já que todas as strings são unicode por padrão. Pequenas mudanças na sintaxe também ocorreram. Apesar das mudanças, muitos pacotes já estão disponíveis em Python 3, como o Numpy, o Django e o Flask. 'Evolução da linguagem' A tabela abaixo mostra a evolução da linguagem: Projeto Premissas Usuário Característico Domínio Construtores Tipos Python tem vários tipos primitivos de dados, dos quais os principais são int, float, string, listas, tuplas e dicionários. Diferentemente do C, Python tem verificação de tipos em tempo de execução, não sendo portanto necessário declarar o tipo de uma variável no código fonte. Os tipos int e float representam inteiros e números reais respectivamente, e são semelhantes ao C. As strings em Python são cadeias de caracteres, e são imutáveis. Há muitos métodos para se manusear strings em Python, conforme a figura: As listas são muito usadas em Python, até porque Python não dispões de uma estrutura de dados para arrays (embora tal estrutura esteja presente em pacotes como o Numpy). Podem ser heterogêneas e são tipos mutáveis. Há muitos métodos para listas em python, conforme a figura: Tuplas são parecidas com as listas, sendo delimitadas por colchetes. A principal diferença está no fato de tuplas serem imutáveis. Segue exemplo: Dicionários são uma das estruturas mais poderosas de Python, sendo também conhecidos como arrays associativos em Python. Trata-se de uma estrutura que guarda pares da forma chave:valor. O dicionário permite inserir, deletar e procurar com uma complexidade média de O(1). Os métodos para se manipular dicionários são mostrados abaixo: Operadores Python possui operadores relacionais, lógicos e aritméticos. Os operadores relacionais são semelhantes a C: Os operadores lógicos funcionam de maneira semelhante a C, porém tem sintaxe diferente: Os operadores aritméticos funcionam de modo semelhante a C, a única diferença é o operador "/" fazer a divisão e converter para float e o operador "//" fazer a divisão e dar o resultado em inteiro: Comandos Python tem comandos condicionais e comandos de iteração. Os principais comandos condicionais de Python são o if, o elif e o else. O exemplo abaixo ilustra seu uso: Os principais comandos de iteração são o while e o "for". O "for" pode ser usado para iterar por uma sequência. Segue exemplo: Funções As funções em Python são declaradas pela palavra reservada "def", seguido do nome da função, seguido dos argumentos que a função recebe. Por Python ter verificação dinâmica, não é necessário declarar os tipos de retorno da função ou os tipos de argumentos. Há a possibilidade de argumentos opcionais, que assumem um valor default caso não sejam passados na chamada da função. Segue exemplo: O resultado no terminal é mostrado abaixo: Há a possibilidade de funções lambda: Python disponibiliza algumas funções sem a necessidade de incluir módulos: Classes Tratamento de Exceções Palavras Reservadas Python possui as seguintes palavras reservadas: * A palavra reservada "and" é equivalente ao && do C. * A palavra reservada "as" serve para dar nome diferente a modulos (Ex: import matplotlib as plt). * A palavra reservada "assert" lança um erro de assertiva caso a expressão passada retorne falso (Ex: assert(2 > 5)). * A palavra reservada "break" funciona como em C. * A palavra reservada "class" define uma classe. * A palavra reservada "continue" funciona como em C. * A palavra reservada "def" é usada na hora de definir funções. * A palavra reservada "del" é usada para deletar uma referência a um objeto (Ex: del x). * A palavra reservada "elif" é equivalente ao else if do C. * A palavra reservada "else" é igual ao C. * A palavra reservada "except" é utilizada no tratamento de exceções. * A palavra reservada "finally" é utilizada para tratamento de exceções. * A palavra reservada "for" é usada para iterar por uma sequência. * A palavra reservada "from" é usada na hora de importar um módulo (Ex: from urllib import request). * A palavra reservada "global" é usada para modificar variáveis globais em contexto local. * A palavra reservada "if" funciona como em C. * A palavra reservada "import" é usada para importar um módulo (Ex: import urllib). * A palavra reservada "in" serve para testar se uma sequência contém um valor específico (Ex: for 4 in pares:...). * A palavra reservada "is" serve para comparar a identidade de objetos, diferenciando-se assim de " " que compara valores. * A palavra reservada "lambda" serve para definir funções lambda. * A palavra reservada "not" funciona como o ! no C. * A palavra reservada "or" funciona como o || em C. * A palavra reservada "pass" não faz nada, podendo ser utilizado quando um comando é requerido sintaticamente. * A palavra reservada "print" imprime na tela. Nas versões 3.x, print passou a ser a função print(). * A palavra reservada "raise" é utilizada no tratamento de exceções. * A palavra reservada "return" funciona como em C. * A palavra reservada "try" é utilizada no tratamento de exceções. * A palavra reservada "while" funciona como em C. * A palavra reservada "with" simplifica tratamento de exceções (Ex: with open('/tmp/workfile', 'r') as f:...). * A palavra reservada "yield" funciona como um "return", com a exceção de que a função irá retornar um gerador (gera valores em tempo de execução). (Ex: for num in list1: yield num*num). Paradigmas da Linguagem Avaliação da Linguagem 'Legibilidade' Python tem poucos componentes básicos (são pouco mais de 30 palavras reservadas, contra mais de 50 da linguagem Java). Há sobrecarga de operadores, porém de maneira bem feita (o operador + pode ser usado para concatenar duas strings, por exemplo). A multiplicidade de recursos, que era um problema na série 2.x foi corrigida nas versões 3.x. Assim, Python apresenta uma ótima simplicidade global. Python tem ótima ortogonalidade, já que é fácil combinar blocos básicos, independentemente do contexto. Há instruções de controle em Python, como o uso do "break" por exemplo, mas este não prejudica a legibilidade por possuir semântica clara e um contexto bem definido para uso. Os tipos de dados primitivos de Python são úteis em uma variedade de situações, e é fácil definir novos tipos. Por fim, Python tem uma sintaxe clara, uma semântica intuitiva e um código em geral pouco carregado, o que torna a linguagem muito legível. O exemplo abaixo mostra a implementação do algoritmo bubblesort em python, e o compara com o mesmo implementado em Java: 'Capacidade de escrita' Python tem simplicidade global e ortogonalidade boa. É fácil definir novas funções ou novas classes, o que torna Python uma linguagem com um bom suporte para abstração. Seus tipos primitivos possuem operações úteis e permitem trabalhar em muitos contextos, o que torna Python uma linguagem com boa expressividade. Sua sintaxe é clara, com operações em alto nível. A desvantagem está na pouca expressividade para comandos mais próximos ao hardware. O exemplo abaixo mostra a leitura de palavra por palavra em um arquivo, e o compara com o mesmo implementado em C: 'Confiabilidade' Python tem 'Custo' 'Outros' Portabilidade * Python pode ser executado nos sitemas operacionais Windows, Mac, Solaris, Linux entre outros. Além disso, sua comunidade garantiu que a série 2.x continuaria sendo atualizada para que funcione em atualizações de sistemas operacionais. Assim sendo, Python possui boa portabilidade. Generalidade * Python tem aplicações em diferentes domínios. É utilizada para ensino, por ser uma linguagem com curva de aprendizagem baixa. Pode ser usada para desenvolvimento Web, com os frameworks Django e Flask. Pode ser usada no domínio científico, com os pacotes Numpy e Astropy. Assim, conclui-se que Python tem boa generalidade. Qualidade de Definição * Python tem gramática bem definida e, portanto, boa qualidade de definição. Resumo Legibilidade: Ótima Capacidade de Escrita: Ótima Confiabilidade: Baixa Custo: Bom Outros: Ótimo Justificativas para uso da linguagem Especificidades Implementação Linguagem de Programação Python * História da linguagem e de seu criador * Conceitos importantes * Exemplos de aplicação * Curiosidades * Bibliografia Como você pode colaborar... O objetivo dessa wiki é facilitar o estudo dos futuros alunos, então é importante colaborar com páginas realmente bem-feitas e com conteúdo. As páginas criadas serão objetos de avaliação, então é importante criar um login que permita identificar quem realizou a alteração(Ex: o número de sua matrícula, número do grupo...). Para colaborar basta criar uma página utilizando o botão Contribuir no canto superior direito. É importante colocar a página na categoria correta, as categorias estão listadas no menu de Navegação. Essa wiki vai ser utilizada nos próximos semestres, então trate-a com carinho, cuidado com erros de português e sinta-se à vontade para contribuir a qualquer momento. Referências *As wiki's dos grupos 1, 2 e 3 foram observadas na hora de montar a estrutura desta. *A pagina da Wikipedia "History of Python" foi utilizada.